package com.ruoyi.system.service;

import java.math.BigDecimal;
import java.util.List;

import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.system.domain.Achievements;
import com.ruoyi.system.domain.Payroll;
import com.ruoyi.system.domain.SalaryStandard;
import com.ruoyi.system.domain.TempUserSalaryDto;

/**
 * 工资Service接口
 *
 * @author ruoyi
 * @date 2022-11-13
 */
public interface IPayrollService extends IService<Payroll>
{
    /**
     * 查询工资
     *
     * @param id 工资主键
     * @return 工资
     */
    public Payroll selectPayrollById(Long id);

    /**
     * 查询工资列表
     *
     * @param payroll 工资
     * @return 工资集合
     */
    public List<Payroll> selectPayrollList(Payroll payroll);

    /**
     * 新增工资
     *
     * @param payroll 工资
     * @return 结果
     */
    public int insertPayroll(Payroll payroll);

    /**
     * 修改工资
     *
     * @param payroll 工资
     * @return 结果
     */
    public int updatePayroll(Payroll payroll);

    /**
     * 批量删除工资
     *
     * @param ids 需要删除的工资主键集合
     * @return 结果
     */
    public int deletePayrollByIds(String ids);

    /**
     * 删除工资信息
     *
     * @param id 工资主键
     * @return 结果
     */
    public int deletePayrollById(Long id);


    /**
     * 创建用户发放工资信息
     * @param data 数据
     * @return 工资对象列表
     */
    public List<Payroll> createSalaryMap(List<TempUserSalaryDto> data);
    /**
     * 计算基本工资
     * @param data 员工工资临时存储对象
     * @return 基本工资
     */
    public BigDecimal calculateBaseSalary(TempUserSalaryDto data);

    /**
     * 计算岗位工资
     * @param data 员工工资临时存储对象
     * @return 岗位工资
     */
    public BigDecimal calculatePostSalary(TempUserSalaryDto data);
    /**
     * 计算绩效工资
     * @param data 员工工资临时存储对象
     * @return 绩效工资
     */
    public BigDecimal calculateMeritSalary(TempUserSalaryDto data);
    /**
     * 计算生活津贴
     * @param data 员工工资临时存储对象
     * @return 生活津贴
     */
    public BigDecimal calculateSubsistenceAllowance(TempUserSalaryDto data);
    /**
     * 计算加班工资
     * @param data 员工工资临时存储对象
     * @return 加班工资
     */
    public BigDecimal calculateOvertimeSalary(TempUserSalaryDto data);
    /**
     * 计算计件工资
     * @param data 员工工资临时存储对象
     * @return 计件工资
     */
    public BigDecimal calculatePieceSalary(TempUserSalaryDto data);

}
